ax^2 + bx + c

Tags:    c++

Hej,

Jeg er total nybegynder i C++ og er derfor løbet ind i problemer. Opgaven går ud på at finde x1 og x2 (som jeg har lavet til variabler) ved at omskrive funktionen af formen ax^2 + bx + c = 0 ( som denne her http://www.intmath.com/Quadratic-equations/Image2063.gif).
Min compiler brokker sig over x1 og x2, hvad gør jeg galt?

Hjælp påskønnes enormt! :D



#include <iostream>
#include <cmath>

using namespace std;



int main()

{

double x1;
double x2;
double a;
double b;
double c;

double funktionen(double x1, double x2);

x1 = (-b + (sqrt(b^2 - 4 * a * c))/(2*a);
x2 = (-b + (sqrt(b^2 - 4 * a * c))/(2*a);


cout << "Input number 1" << endl;
cin >> x1;
cout << "Your number is: " << x1 << endl;

return 0;



}





Hej Henning,

Først og fremmest, double funktionen(...); jeg er ikke sikker på hvad dte er du prøver, men jeg er ret sikke rpå at det ikke er den korrekte måde.

x1 = (-b + (sqrt(b^2 - 4 * a * c))/(2*a);
x2 = (-b + (sqrt(b^2 - 4 * a * c))/(2*a);
Disse to linjer nås, inden at hverken x1, x2, b, a eller c har nogen værdi. Og dermed vil det give en fejl.

Fold kodeboks ind/udKode 



Med venlig hilsen
Ieet






x1 = (-b + (sqrt(b^2 - 4 * a * c))/(2*a);
x2 = (-b + (sqrt(b^2 - 4 * a * c))/(2*a);



...og hvad der næsten er værre...^ er ikke en potens operator (det findes ikke, ^ betyder 'exclusive or').

Du kan bruge pow(b, 2) eller hvad der er meget hurtigere: b*b



Whoops... pinligt at jeg ikke så den.





Lad mig lige tilføje at den måde du finder x1 og x2 på ikke er helt korrekt.

Du kan nemlig få et forkert resultat hvis du udregner x1 og x2 som du her gør.

Hvis 4ac er meget lille i forhold til b vil (sqrt(b^2 - 4 * a * c)) være meget tæt på b. Det betyder at -b + (sqrt(b^2 - 4 * a * c)) fører til det der hedder en "cancelllation" fejl.

Det du skal gøre er følgende:

hvis b er positiv udregner du x1 som:

x1 = -b - (sqrt(b^2 - 4 * a * c)) og x2 udregnes da som:

x2 = c/ax1

Hvis b er negativ skal x1 udregnes som:

x1 = -b + (sqrt(b^2 - 4 * a * c))

og x2 som ovenfor.

Generelt skal du ikke blot kopiere formler fra en matematikbog når du skal implementere dem i et computerprogram. Grundet computerens endelige hukommelse vil det altid føre til fejl og forkerte resultater. Og det er ikke for tidligt at lære det rigtigt :)




Indlæg senest redigeret d. 22.02.2008 11:08 af Bruger #4522
1000 mange tak for jeres besvarelser.

Efter at have ændret potens til formen (pow(b, 2), får jeg ingen fejlmeldninger og programmet kører fint. Dog ser det ud til at mit input (x1) ikke bliver kørt igennem mat formlen..... hvorfor??

Det ser således ud:

[Session started at 2008-02-22 13:05:53 +0100.]
Input number 1
3
Your number is: 3

Math_Expressions has exited with status 0.

Hvad gør jeg galt? Er det forkert som jeg erklærer de forskellige variabler, eller hvordan?

Hjælp påskønnes altid! :D:D



t